/**
  ****************************(C) COPYRIGHT 2024 Polarbear****************************
  * @file       can_receive.c/h
  * @brief      CAN中断接收函数，接收电机数据.
  * @note       支持DJI电机 GM3508 GM2006 GM6020
  *             
  * @history
  *  Version    Date            Author          Modification
  *  V2.0.0     Mar-27-2024     Penguin         1. 添加CAN发送函数和新的电机控制函数，解码中将CAN1 CAN2分开。
  *  V2.3.0     May-22-2024     Penguin         1. 添加板间通信数据解码
  *
  @verbatim
  ==============================================================================
    dm电机设置：
    为了配合本框架，请在使用上位机进行设置时，将dm电机的master id 设置为 slave id + 0x50
  ==============================================================================
  @endverbatim
  ****************************(C) COPYRIGHT 2024 Polarbear****************************
  */

#ifndef CAN_RECEIVE_H
#define CAN_RECEIVE_H

#include "motor.h"
#include "stm32f4xx_hal.h"
#include "remote_control.h"

#define CAN_1 hcan1
#define CAN_2 hcan2

/*DJI电机用相关ID定义*/
typedef enum {
    DJI_M_ID   = 0x200,   //控制M1-M4     -----------
    DJI_M1_ID  = 0x201,   // 3508/2006电机ID
    DJI_M2_ID  = 0x202,   // 3508/2006电机ID
    DJI_M3_ID  = 0x203,   // 3508/2006电机ID
    DJI_M4_ID  = 0x204,   // 3508/2006电机ID
    DJI_MG_ID  = 0x1FF,   // 控制MG5-MG8  ------------
    DJI_MG5_ID = 0x205,   // 3508/2006电机ID (/6020电机ID 如分不清关系不建议使用)
    DJI_MG6_ID = 0x206,   // 3508/2006电机ID (/6020电机ID 如分不清关系不建议使用)
    DJI_MG7_ID = 0x207,   // 3508/2006电机ID (/6020电机ID 如分不清关系不建议使用)
    DJI_MG8_ID = 0x208,   // 3508/2006电机ID (/6020电机ID 如分不清关系不建议使用)
    DJI_G_ID   = 0x2ff,   // 控制G9-G11   ------------
    DJI_G9_ID  = 0x209,   // 6020电机ID
    DJI_G10_ID = 0x20A,   // 6020电机ID
    DJI_G11_ID = 0x20B,   // 6020电机ID
} DJI_Motor_ID;

extern const DjiMotorMeasure_t * GetDjiMotorMeasurePoint(uint8_t can, uint8_t i);

extern void GetMotorMeasure(Motor_s * p_motor);

extern uint16_t GetOtherBoardDataUint16(uint8_t data_id, uint8_t data_offset);

extern void CAN_cmd_chassis_reset_ID();
#endif
